Computer systems access peripheral input/output devices such as keyboards, printers, removable data storage, microphones, audio speakers and the like using interface protocols that provide for communication with the devices. The devices can be physically connected to the computer system using a cable or other wired connection over which input data from the peripheral and/or output data to the peripheral is transferred. Examples of these interface protocols include Universal Serial Bus (USB), FireWire (IEEE 1394), the Thunderbolt bus provided by Apple® Inc., and PCI Express®.
The process of designing, implementing, and testing new hardware and software, such as computer systems, peripherals, mobile devices, and other types of devices, and the associated software such as operating systems and device drivers, can involve the use of simulations of the devices being developed. For example, as a component for a computer system, such as a System on a Chip (SOC), is being developed, the hardware design is represented as data that includes the parts or devices used in the design, along with interconnections between and physical parameters of the devices. This representation can be used by a simulator that models the behavior of the parts or devices. The simulator can model the operation of the hardware device, performing simulated actions in a computer system running the simulator, so that the simulated actions and their results can be monitored and compared against expected actions and results to determine whether the design of the hardware device operates correctly. Simulators can use highly detailed representations of the hardware device, e.g., modeling each transistor or gate in the chip that will be produced, in which case the simulation performs at a relatively slow speed because of the large number of operations performed by the computer system to model the device. Other simulators can use less-detailed representations, such as higher-level simulations that model the behavior of the components in the hardware with less detail, and potentially less accuracy, but perform the simulations more quickly than more detailed simulators. In some cases, certain portions of the device are not simulated, e.g., because no simulator for or representation of those potions of the device is available, or simulation of those portions is difficult. In such cases, the device can be modeled as a black box that processes input and generates output, without accurate timing behavior or interaction with other portions of the simulation. Actual hardware devices such as prototypes implemented as Field-Programmable Gate Arrays (FPGAs) can also be used as simulators in place of or in combination with software simulators, in which case portions of the simulation that are not available in software can be provided by hardware models or actual hardware (e.g., actual peripheral devices) that interface with the hardware and/or software models to provide a complete simulation. However, hardware models can be expensive and difficult to debug, because, for example, they do not necessarily provide detailed information about each step of the simulation or fine control such as stepping through the simulation at a desired level of detail.